

export default {
  
  namespaced: true,
  
  state: () => ({
    cart:  JSON.parse( uni.getStorageSync('cart') || '[]' ), // 购物车可以存放多个商品
  }),
  // 修改state数据的方法
  mutations: {
    // 定义一个修改 cart 的方法
    addCart(state, goods){
      // console.log('准备数据前', JSON.stringify(state.cart))
      // 根据提交的商品的Id，查询购物车中是否存在这件商品
      // 如果不存在，则 findResult 为 undefined；否则，为查找到的商品信息对象
      const result = state.cart.find((x) => x.goods_id === goods.goods_id)
      if (!result) {
        // 如果购物车中没有这件商品，则直接 push
        state.cart.push(goods)
        // 如果要添加到首部使用下面的方法
        // state.cart.unshift(goods)
      } else {
        // 如果购物车中有这件商品，则只更新数量即可
        result.goods_count += 1
      }
      // console.log('修改数据后', JSON.stringify(state.cart))
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    // 更新商品的选中状态
    updateGoodsState(state, goods) {
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      if(result){
        // 更新商品的选中状态
        result.goods_state = goods.goods_state
      }
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    // 更新商品数量
    updateGoodsCount(state, goods){
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      if(result){
        // 更新商品的数量
        result.goods_count = goods.goods_count
      }
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    // 更新商品的选中状态
    updateGoodsAllState(state, isFullCheck){
      state.cart.forEach(item => item.goods_state = isFullCheck)
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    // 删除购物车商品
    deleteCartGoods(state, goods){
      state.cart = state.cart.filter(item => item.goods_id !== goods.goods_id)
      // 保存到本地
      this.commit('m_cart/saveToStorage')
    },
    // 保存购物车数据到本地
    saveToStorage(state){
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    }
  },
  
  // 基于state计算出来的显示用的值
  getters: {
    total(state) {
      return state.cart.reduce((acc, item) => acc + item.goods_count , 0)
    },
    // 判断购物车中的商品是否全部选中
    isFullCheck(state){
      return state.cart.every(item => item.goods_state)
      // return state.cart.every(item => item.goods_state === true)
    },
    // 购物车选中商品的价格总和
    totalPrice(state){
      return state.cart.filter(item => item.goods_state)
                       .reduce((acc, curr) => acc + curr.goods_count * curr.goods_price , 0)
    },
    // 购物车选中商品的总数量
    totalAmount(state){
      return state.cart.filter(item => item.goods_state)
                       .reduce((acc, curr) => acc + curr.goods_count , 0)
    }
  }
}